auto DSP4::serialize(serializer& s) -> void {
  s.integer(DSP4i::DSP4.waiting4command);
  s.integer(DSP4i::DSP4.half_command);
  s.integer(DSP4i::DSP4.command);
  s.integer(DSP4i::DSP4.in_count);
  s.integer(DSP4i::DSP4.in_index);
  s.integer(DSP4i::DSP4.out_count);
  s.integer(DSP4i::DSP4.out_index);
  s.array(DSP4i::DSP4.parameters);
  s.array(DSP4i::DSP4.output);

  s.integer(DSP4i::DSP4_vars.DSP4_Logic);
  s.integer(DSP4i::DSP4_vars.lcv);
  s.integer(DSP4i::DSP4_vars.distance);
  s.integer(DSP4i::DSP4_vars.raster);
  s.integer(DSP4i::DSP4_vars.segments);
  s.integer(DSP4i::DSP4_vars.world_x);
  s.integer(DSP4i::DSP4_vars.world_y);
  s.integer(DSP4i::DSP4_vars.world_dx);
  s.integer(DSP4i::DSP4_vars.world_dy);
  s.integer(DSP4i::DSP4_vars.world_ddx);
  s.integer(DSP4i::DSP4_vars.world_ddy);
  s.integer(DSP4i::DSP4_vars.world_xenv);
  s.integer(DSP4i::DSP4_vars.world_yofs);
  s.integer(DSP4i::DSP4_vars.view_x1);
  s.integer(DSP4i::DSP4_vars.view_y1);
  s.integer(DSP4i::DSP4_vars.view_x2);
  s.integer(DSP4i::DSP4_vars.view_y2);
  s.integer(DSP4i::DSP4_vars.view_dx);
  s.integer(DSP4i::DSP4_vars.view_dy);
  s.integer(DSP4i::DSP4_vars.view_xofs1);
  s.integer(DSP4i::DSP4_vars.view_yofs1);
  s.integer(DSP4i::DSP4_vars.view_xofs2);
  s.integer(DSP4i::DSP4_vars.view_yofs2);
  s.integer(DSP4i::DSP4_vars.view_yofsenv);
  s.integer(DSP4i::DSP4_vars.view_turnoff_x);
  s.integer(DSP4i::DSP4_vars.view_turnoff_dx);
  s.integer(DSP4i::DSP4_vars.viewport_cx);
  s.integer(DSP4i::DSP4_vars.viewport_cy);
  s.integer(DSP4i::DSP4_vars.viewport_left);
  s.integer(DSP4i::DSP4_vars.viewport_right);
  s.integer(DSP4i::DSP4_vars.viewport_top);
  s.integer(DSP4i::DSP4_vars.viewport_bottom);
  s.integer(DSP4i::DSP4_vars.sprite_x);
  s.integer(DSP4i::DSP4_vars.sprite_y);
  s.integer(DSP4i::DSP4_vars.sprite_attr);
  s.integer(DSP4i::DSP4_vars.sprite_size);
  s.integer(DSP4i::DSP4_vars.sprite_clipy);
  s.integer(DSP4i::DSP4_vars.sprite_count);

  s.array(DSP4i::DSP4_vars.poly_clipLf[0]);
  s.array(DSP4i::DSP4_vars.poly_clipLf[1]);
  s.array(DSP4i::DSP4_vars.poly_clipRt[0]);
  s.array(DSP4i::DSP4_vars.poly_clipRt[1]);
  s.array(DSP4i::DSP4_vars.poly_ptr[0]);
  s.array(DSP4i::DSP4_vars.poly_ptr[1]);
  s.array(DSP4i::DSP4_vars.poly_raster[0]);
  s.array(DSP4i::DSP4_vars.poly_raster[1]);
  s.array(DSP4i::DSP4_vars.poly_top[0]);
  s.array(DSP4i::DSP4_vars.poly_top[1]);
  s.array(DSP4i::DSP4_vars.poly_bottom[0]);
  s.array(DSP4i::DSP4_vars.poly_bottom[1]);
  s.array(DSP4i::DSP4_vars.poly_cx[0]);
  s.array(DSP4i::DSP4_vars.poly_cx[1]);
  s.array(DSP4i::DSP4_vars.poly_start);
  s.array(DSP4i::DSP4_vars.poly_plane);
  s.array(DSP4i::DSP4_vars.OAM_attr);
  s.integer(DSP4i::DSP4_vars.OAM_index);
  s.integer(DSP4i::DSP4_vars.OAM_bits);
  s.integer(DSP4i::DSP4_vars.OAM_RowMax);
  s.array(DSP4i::DSP4_vars.OAM_Row);
}
